from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet
from rest_framework.mixins import UpdateModelMixin
from orders.models import OrderInfo
from meiduo_admin.serializers.order_serializers import OrderInfoSimpleSerializer, OrderInfoDetailSerializer
from meiduo_admin.utils import MyPagination


class OrdersView(ReadOnlyModelViewSet, UpdateModelMixin):
    """ 订单表 查看和修改 """

    queryset = OrderInfo.objects.all().order_by("create_time")
    serializer_class = OrderInfoSimpleSerializer
    pagination_class = MyPagination

    def get_queryset(self):
        keyword = self.request.query_params.get("keyword")
        if keyword:
            return self.queryset.filter(order_id__icontains=keyword.lower())
        else:
            return self.queryset.all()

    # self.list视图函数序列化返回列表数据应该使用OrderInfoSimpleSerializer
    # self.retrieve视图函数序列化返回详情数据应该使用OrderInfoDetailSerializer
    # 问题点：如何在一个视图集中，控制不同的视图函数，使用不同的序列化器来完成不同的数据序列化操作
    def get_serializer_class(self):
        # 问题点：如何判定此次处理请求的视图函数; 答：self.action是一个字符串，就是处理此次请求的视图函数名
        if self.action == "list":
            return OrderInfoSimpleSerializer
        if self.action == "retrieve" or "partial_update":
            return OrderInfoDetailSerializer
